package controller

import (
	"fmt"
	"go_code/day14/test02_gin/model"
	"strconv"
	"time"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// 图书列表
func AllBook(ctx *gin.Context) {
	// 查询数据
	books, err := model.AllBook()
	if err != nil {
		ctx.String(200, "服务器端错误")
		return
	}
	fmt.Println(books)
	// 否则成功， 响应模板
	ctx.HTML(200, "all_book.html", gin.H{
		"books": books,
	})
}

// 新增图书
func AddBook(ctx *gin.Context) {
	// 获取POST请求中，表单数据传递的参数
	title := ctx.PostForm("title")
	pub := ctx.PostForm("pub")
	price := ctx.PostForm("price")
	market_price := ctx.PostForm("market_price")
	// 将字符串转为浮点型
	pv, _ := strconv.ParseFloat(price, 64)
	mv, _ := strconv.ParseFloat(market_price, 64)
	// 将接收这组参数放入到Book结构体变量
	book := model.Book{
		Title:        title,
		Pub:          pub,
		Price:        pv,
		Market_price: mv,
	}
	// 插入数据
	err := model.AddBook(book)
	if err != nil { // 有错误
		ctx.String(500, "图书添加失败")
	} else {
		// ctx.String(200, "图书添加成功")
		// 跳转到图书列表 /all_book
		ctx.Redirect(302, "/all_book")
	}
}

// 通过ID查询图书，最后回显到表单
func DetailBook(ctx *gin.Context) {
	// 获取GET传递的参数
	id := ctx.Query("id")
	fmt.Println("ID值：", id)
	// 查询ID对应的图书
	book, err := model.SelectBookByID(id)
	if err != nil {
		ctx.String(500, "查询失败")
	} else {
		ctx.HTML(200, "update_book.html", gin.H{
			"book": book,
		})
	}

}

// 修改图书
func UpdateBook(ctx *gin.Context) {
	// 获取POST中表单数据传递的参数
	id := ctx.PostForm("id")
	title := ctx.PostForm("title")
	pub := ctx.PostForm("pub")
	price := ctx.PostForm("price")
	market_price := ctx.PostForm("market_price")
	// 字符串转为整型
	newId, _ := strconv.ParseUint(id, 10, 64)
	newPrice, _ := strconv.ParseFloat(price, 64)
	newMarketPrice, _ := strconv.ParseFloat(market_price, 64)

	// 将修改的值放入到结构体变量
	book := model.Book{
		Model: gorm.Model{
			ID:        uint(newId), // 修改ID
			CreatedAt: time.Now(),  // 修改时间
		},
		Title:        title,
		Pub:          pub,
		Price:        newPrice,
		Market_price: newMarketPrice,
	}
	// 修改图书
	err := model.UpdateBook(book)
	if err != nil {
		ctx.String(500, "图书修改失败")
	} else {
		ctx.Redirect(302, "/all_book")
	}
}

// 删除图书
func DeleteBook(ctx *gin.Context) {
	// 获取GET传递的参数
	id := ctx.Query("id")
	// 删除对应的数据
	count, err := model.DeleteBook(id)
	if err != nil {
		ctx.String(500, "删除失败")
	} else if count == 0 {
		ctx.String(404, "删除的数据不存在")
	} else {
		// ctx.String(200, "删除成功")
		ctx.Redirect(302, "/all_book")
	}
}
